<?php

namespace app\admin\controller;
use think\Controller;
use app\admin\model\Article;
use think\Db;
use app\admin\model\Project;
use app\admin\model\Column;
use think\Session;
use app\admin\model\Proinfo as DbProinfo;
use app\admin\model\Bdapi;

/*文章管理*/
class Artmanage extends Controller{


    public function index(){
        $user=Session::get('user_id');

        echo $user;
        if (!empty($user)){
            //判断是否有session
            $Dbcolumn=new Column();
            $result=$Dbcolumn->list_colunm();

            return $this->fetch('',["column"=>$result]);
        }else{

            $this->redirect('admin/login/index');
        }
    }

    //渲染数据表格
    public function show(){
        $page=request()->param('page');
        $limit=request()->param('limit');
        $DbArt=new Article();
        //数据表格重载
        $columnId=request()->param('columnId');
        if (!empty($columnId)){

            $result=$DbArt->column_art($columnId,$page,$limit);
            $array=[
                "code"=>0,
                "msg"=>"",
                "count"=>$result['num'],
                "data"=>$result['info'],
            ];

        }else{
            //正常分页加载


            $result=$DbArt->AllArticle($page,$limit);


            $array=[
                "code"=>0,
                "msg"=>"",
                "count"=>$result['num'],
                "data"=>$result['info'],
            ];
        }



        print_r(json_encode($array)) ;
    }





    //删除选中文章
    public function deleteArt(){

        $datas= input("datas/a");

        if (empty($datas)){
            //如果未选择文章点删除
            $fh=[
                "code"=>-1,
                "message"=>"未选择文章"
            ];
            return  $fh;
        }




        $ids=[];

        $Dbproject=new Project();
        $HomePath= $Dbproject->selectHomePath();//根目录路径
        $art_dir_name= $Dbproject->art_dir_name();//输出文章文件夹名称


        for ($i=0;$i<count($datas);$i++){

            $ids[]=$datas[$i]['id'];//循环提取数组中id，赋值给新数组
            $static=$datas[$i]['static'];


            //删除静态文章
            if ($static==1){

                $art_res=Db::table('article')->where('id','=',$datas[$i]['id'])->find();
                $column_id=$art_res['column_id'];//栏目id

                $column_res=Db::table('column')->where('id','=',$column_id)->find();

                $dir_name=$column_res['dir_name'];//栏目目录文件名称

                //删除生成的文章
                $path=$HomePath."$art_dir_name/".$dir_name."/".$datas[$i]['id'].".html";
                if (file_exists($path)){
                    unlink($path);
                }

            }

        }

        $DbArt=new Article();
        $result=$DbArt->deleteArticle($ids);//$result为删除成功的记录条数



        $array=[
            "message"=>"您选中了".count($ids)."条，成功删除".$result."条",
            "code"=>1
        ];


        return $array;

    }



    //预览文章
    public function Preview(){
        $id=input("id");//文章的id

        $DbProinfo=new DbProinfo();//项目公共信息
        $pro_info_result=$DbProinfo->show();

        $Dbart=new Article();//文章内容
        $result=$Dbart->selectArticle($id);




        $art_res=Db::table('article')->where('id','=',$id)->find();
        $column_id=$art_res['column_id'];//栏目id

        $Dbcolumn=new Column();
        $column_res=$Dbcolumn->selectColumn($column_id);//通过栏目id查询栏目对应文件夹名称、对应模板名称

        $art_temp=$column_res['article_templates'];//文章模板

        if (empty($art_temp)){
            return "模板不存在";
        }else{
            return  $this->fetch("public/static/templets/index/$art_temp",
                [
                    "title"=>$result['title'],//文章标题
                    "thumbnail"=>$result['thumbnail'],//文章缩略图
                    "time"=>$result['time'],//文章发布时间
                    "content"=>$result['content'],//文章内容
                    "project_name"=>$pro_info_result['pj_name'],//项目名称
                    "icp"=>$pro_info_result['icp'],//ICP备案信息
                    "tj"=>$pro_info_result['tj'],//第三方统计代码
                    "logo"=>$pro_info_result['logo'],//页面logo
                    "next_tag"=>"预览时此功能不可用",//下篇文章标签
                    "last_tag"=>"预览时此功能不可用",//上篇文章标签
                ]);
        }






    }


    /**
     * @param array $datas 文章id数组
     * 这是一个内部使用的方法，所以定义为protected，不能当接口访问
     * @return int 返回成功生成的文章数量
     */
    protected function build(array $datas){

            $array=[];//存储文章生成的结果，用来判断生成成功了多少文章

            $DbProinfo=new DbProinfo();//项目公共信息
            $pro_info_result=$DbProinfo->show();

            $Dbproject=new Project();
            $HomePath= $Dbproject->selectHomePath();
            $art_dir_name= $Dbproject->art_dir_name();

            $Dbarticle=new Article();

            $Dbcolumn=new Column();
            for ($s=0;$s<count($datas);$s++){
                $ids=$datas[$s]['id'];
                $columnIds=$datas[$s]['column_id'];

                /**
                 *将文章的路径与生成状态先保存至数据库，以便下面生成静态文章
                 * 否则下面再生成 “下一篇”文章时会出现没链接或因为不是已生成文章而产生的没有下篇文章
                 */

                $column_res=$Dbcolumn->selectColumn($columnIds);//通过栏目id查询栏目对应文件夹名称、对应模板名称
                $DirectoryName=$column_res['dir_name'];//目录名称

                $Dbarticle->update_ArtUrl_Static($ids,"/$art_dir_name/".$DirectoryName."/".$ids.".html",1);//保存文章url，便于前台调用

            }



            for ($i=0;$i<count($datas);$i++){
                $ids=$datas[$i]['id'];
                $columnIds=$datas[$i]['column_id'];


                $result=$Dbarticle->selectArticle($ids);//通过文章id查询文章内容
                $next_result=$Dbarticle->select_Next_Article($ids,$columnIds);
                if (!empty($next_result)){
                    $next_url=$next_result['url'];//下篇文章链接
                    $next_title=$next_result['title'];//下篇文章标题
                    $next_tag="<a href='$next_url'>$next_title</a>";
                }else{
                    $next_tag="没有下一篇";
                }


                $last_result=$Dbarticle->select_Last_Article($ids,$columnIds);
                if (!empty($last_result)){
                    $last_url=$last_result['url'];//上一篇文章链接
                    $last_title=$last_result['title'];
                    $last_tag="<a href='$last_url'>$last_title</a>";
                }else{
                    $last_tag="没有上一篇";
                }



                $column_res=$Dbcolumn->selectColumn($columnIds);//通过栏目id查询栏目对应文件夹名称、对应模板名称
                $DirectoryName=$column_res['dir_name'];//目录名称
                $art_temp=$column_res['article_templates'];//文章模板


                $this->fetch("public/static/templets/index/$art_temp",
                    [
                        "title"=>$result['title'],//文章标题
                        "thumbnail"=>$result['thumbnail'],//文章缩略图
                        "time"=>$result['time'],//文章发布时间
                        "content"=>$result['content'],//文章内容
                        "project_name"=>$pro_info_result['pj_name'],//项目名称
                        "icp"=>$pro_info_result['icp'],//ICP备案信息
                        "tj"=>$pro_info_result['tj'],//第三方统计代码
                        "logo"=>$pro_info_result['logo'],//页面logo
                        "next_tag"=>$next_tag,//下篇文章标签
                        "last_tag"=>$last_tag,//上篇文章标签
                    ]);


                /**
                 * 静态文章生成
                 */
                $result=$this->buildHtml($ids,$HomePath.$art_dir_name."/".$DirectoryName."/","public/static/templets/index/$art_temp");


                $array[]=$result;
            }

            return count($array);








    }


    /**
     * 批量更新\生成文章
     * @return array 返回操作结果
     */
    public function updateArt(){


        $datas=input("datas/a");//接收数组

        if (empty($datas)){

            $fh=[
                "code"=>-1,
                "message"=>"未选择文章"
            ];
            return  $fh;
        }
        try {
            $num=$this->build($datas);
        }catch (\Exception $exception){

            $fh=[
              "code"=>-2,
              "message"=>"文章生成/更新时遇到了问题"
            ];
            return  $fh;
        }


        $fh=[
            "code"=>1,
            "message"=>"成功生成了".$num."篇文章"
        ];


        return $fh;

    }


    public function column_update(){
        $column_id=input("columnId");
        if (empty($column_id)){
            $fh=[
                "code"=>-1,
                "message"=>"请选择栏目"
            ];
            return  $fh;
        }

        $Dbart=new Article();
        $datas=$Dbart->atr_ids($column_id);

        $num=$this->build($datas);
        $fh=[
            "code"=>1,
            "message"=>"成功生成了".$num."篇文章"
        ];


        return $fh;

    }




    //修改文章
    public function editArt(){
        $id=input('id');//文章id
        $title=input('title');//标题
        $Article=input('html');//文章内容html格式
        $columnId=input('columnId');//文章所属栏目id
        $thumbnailUrl=input('thumbnailUrl');//缩略图url
        $ArticleText=input('text');//文章文本格式内容

        date_default_timezone_set('PRC');//设置时区
        $time=input('time')==null ? date("Y-m-d H:i:s") :input('time');
        $DbArt=new Article();
        $DbArt->updateArt($id,$title,$Article,$thumbnailUrl,$time,$columnId,$ArticleText);


        $fh=[
            'code'=>1,
            'message'=>'文章更新完毕'
        ];


        return $fh;


    }


    //获取文章内容
    public function get_content(){

        $id=input('id');

        $Dbart=new Article();
        $result=$Dbart->selectArticle($id);
        return json_encode($result);

    }


    //百度文章收录推送
    public function bd_send(){
        $datas=input("datas/a");//接收数组
        if (empty($datas)){

            $fh=[
                "code"=>-1,
                "message"=>"未选择文章"
            ];
            return  $fh;
        }

        $Dbpro=new Project();
        $domain_name=$Dbpro->domain_name();//域名

        $Dbbdapi=new Bdapi();
        $token=$Dbbdapi->sel_token();


        $urls=[];

        for ($i=0;$i<count($datas);$i++){
            if ($datas[$i]['url']!=""){
                array_push($urls,$domain_name.$datas[$i]['url']);
            }
        }

        try {
            $api = 'http://data.zz.baidu.com/urls?site='.$domain_name.'&token='.$token;

            $ch = curl_init();
            $options =  array(
                CURLOPT_URL => $api,
                CURLOPT_POST => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POSTFIELDS => implode("\n", $urls),
                CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
            );
            curl_setopt_array($ch, $options);
            $result = curl_exec($ch);
            $result=(array)json_decode($result);//先将json转换成stdClass对象，然后再转换成数组
            $fh=[
                "code"=>1,
                "message"=>"选择了".count($datas)."篇文章，成功推送了".$result['success']."篇文章，今日剩余额度".$result['remain']
            ];

            return  $fh;

        }catch (\Exception $exception){
            $fh=[
                "code"=>-2,
                "message"=>"请检查项目域名或百度站长token是否正确"
            ];

            return  $fh;


        }






    }




}
